www.gusucode.com > RQCMS PHP文章管理系统 v2.3PHP源码程序 > RQCMS PHP文章管理系统 v2.3/rqcms_v2.3/rqcms_v2.3/core/manager/plugin.php
<?php //先查询数据库中的插件 $pluginsquery=$DB->query("Select * from ".DB_PREFIX."plugin"); $plugindb=array(); while($arr=$DB->fetch_array($pluginsquery)) { $pluginfile=RQ_DATA.'/plugins/'.$arr['file'].'/'.$arr['file'].'.php'; $settingfile=RQ_DATA.'/plugins/'.$arr['file'].'/'.$arr['file'].'_setting.php'; if(file_exists($pluginfile)&&file_exists($settingfile)) { $plugindb[$arr['file']]=$arr; } else $DB->query('update '.DB_PREFIX."plugin set `active`=0 where file='".$arr['file']."'"); } //遍历目录 $pluginfile=getPlugins(); $needrecache=false; foreach($pluginfile as $filename=>$fileinfo) { if(!isset($plugindb[$filename])){ $pluginarr=$DB->fetch_first('Select * from `'.DB_PREFIX."plugin` where `file`='$filename'"); if(empty($pluginarr)){ $DB->query("Insert into `".DB_PREFIX."plugin` (`file`,`name`,`author`,`version`,`description`,`url`,`active`) values ('$filename','$fileinfo[name]','$fileinfo[author]','$fileinfo[version]','$fileinfo[description]','$fileinfo[url]','0')"); $fileinfo['active']=0; $fileinfo['pid']=$DB->insert_id(); }else{ $fileinfo=$pluginarr; } $plugindb[$filename]=$fileinfo; $needrecache=true; } } if($needrecache) setting_recache(); $curentPlugin=isset($_GET['plugin'])?$_GET['plugin']:(isset($_POST['plugin'])?$_POST['plugin']:'');//当前设置的插件 if(!isset($plugindb[$curentPlugin])) $curentPlugin=''; if(RQ_POST) { if($action=='upload') {//上传安装的 $url=$admin_url.'?file=plugin&action=install'; $zipfile = isset($_FILES['pluzip']) ? $_FILES['pluzip'] : ''; if (empty($zipfile)||$zipfile['error'] == 4){ redirect('请选择一个zip插件安装包',$url); } if (!$zipfile || $zipfile['error'] >= 1 || empty($zipfile['tmp_name'])){ redirect('插件上传失败',$url); } if (getFileSuffix($zipfile['name']) != 'zip') { redirect('只支持zip压缩格式的插件包',$url); } $ret = rqUnZip($zipfile['tmp_name'], RQ_DATA.'/plugins/', 'plugin'); if($ret==true){ redirect('插件安装成功',$admin_url.'?file=plugin'); } else redirect($ret,$url); } else if($action=='setting') {//插件的保存设置 if($curentPlugin) { include RQ_DATA."/plugins/{$curentPlugin}/{$curentPlugin}_setting.php"; doAction('admin_plugin_setting_save'); exit; } } } else { if(empty($action)) $action='list'; if($action=='active'){ $active=$_GET['active']; $active=$active?'0':'1'; $pid=$_GET['pid']; $DB->query('update '.DB_PREFIX."plugin set active=$active where pid=$pid"); setting_recache(); redirect("插件状态更新成功",$admin_url.'?file=plugin'); } else if($action=='delete') { if($groupid!=4) redirect("您无权删除插件",$admin_url.'?file=plugin'); $pid=$_GET['pid']; $arr=$DB->fetch_first('select * from '.DB_PREFIX."plugin where pid=$pid"); if(!empty($arr)) { $DB->query('delete from '.DB_PREFIX."plugin where pid=$pid"); if(rmdir(RQ_DATA.'/plugins/'.$arr['file'])){ setting_recache(); redirect("插件删除成功",$admin_url.'?file=plugin'); } redirect("删除删除失败",$admin_url.'?file=plugin'); } } else if($action=='setting') { if($curentPlugin) { include RQ_DATA."/plugins/{$curentPlugin}/{$curentPlugin}_setting.php"; } else { redirect("不存在的插件",$admin_url.'?file=plugin'); } } } //插件菜单 $pluginitem=array(); doAction('admin_plugin_add_item'); /** * 获取所有插件列表,未定义插件名称的插件将不予获取 * 插件目录:content\plugins * 仅识别 插件目录/插件/插件.php 目录结构的插件 * @return array */ function getPlugins() { $emPlugins = array(); $pluginFiles = array(); $pluginPath = RQ_DATA . '/plugins'; $pluginDir = @ dir($pluginPath); if ($pluginDir){ while(($file = $pluginDir->read()) !== false){ if (preg_match('|^\.+$|', $file)){ continue; } if (is_dir($pluginPath . '/' . $file)){ $pluginsSubDir = @ dir($pluginPath . '/' . $file); if ($pluginsSubDir){ while(($subFile = $pluginsSubDir->read()) !== false){ if (preg_match('|^\.+$|', $subFile)){ continue; } if ($subFile == $file.'.php'){ $pluginFiles[] = "$file/$subFile"; } } } } } } if (!$pluginDir || !$pluginFiles){ return $emPlugins; } sort($pluginFiles); foreach($pluginFiles as $pluginFile){ $pluginData = getPluginData("$pluginPath/$pluginFile"); if (empty($pluginData['name'])){ continue; } $pfilename=explode(".",basename($pluginFile)); $emPlugins[$pfilename[0]] = $pluginData; } return $emPlugins; } /** * 获取插件信息 * * @param string $pluginFile * @return array */ function getPluginData($pluginFile) { $pluginData = implode('', file($pluginFile)); preg_match("/Plugin Name:(.*)/i", $pluginData, $plugin_name); preg_match("/Version:(.*)/i", $pluginData, $version); preg_match("/Description:(.*)/i", $pluginData, $description); preg_match("/Author:(.*)/i", $pluginData, $author_name); preg_match("/Author URL:(.*)/i", $pluginData, $author_url); $plugin_name = isset($plugin_name[1]) ? trim($plugin_name[1]) : ''; $version = isset($version[1]) ? $version[1] : ''; $description = isset($description[1]) ? $description[1] : ''; $plugin_url = isset($plugin_url[1]) ? trim($plugin_url[1]) : ''; $author = isset($author_name[1]) ? trim($author_name[1]) : ''; $author_url = isset($author_url[1]) ? trim($author_url[1]) : ''; return array( 'name' => $plugin_name, 'version' => $version, 'description' => $description, 'author' => $author, 'url' => $author_url, ); } function dataFrom($plugin) { $pluginName=isset($_GET['plugin'])?$_GET['plugin']:''; if(!$pluginName) $pluginName=isset($_POST['plugin'])?$_POST['plugin']:''; if($plugin==$pluginName) return true; return false; }